#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTcpSocket>
#include <QLabel>
#include <QTimer>
#include <QStackedWidget>
#include <QJsonObject>
#include "vehiclepage.h"
#include "parkingspotpage.h"
#include "parkingrecord.h"
#include "paymentpage.h"
#include "statisticspage.h"
#include "aiserver.h"
#include "aichatdialog.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

public slots:
    void reconnect();
    void on_pushButton_clicked();
    void on_pushButton_2_clicked();
    void onSocketReadyRead();

    void showVehiclePage();     // 出入车辆管理
    void showQueryPage();       // 车位查询
    void showRecordPage();      // 停车记录
    void showPaymentPage();     // 缴费管理
    void showStatisticsPage();  // 统计

    void showPaymentPlan();

    void onHandleAI();
    void openLocalPaymentFile();
    void openLocalParkingRecordFile();

signals:
    void messageForVehiclePage(const QJsonObject& json);
    void messageForParkingSpotPage(const QJsonObject& json);
    void messageForParkingRecordPage(const QJsonObject& json);
    void messageForPaymentPage(const QJsonObject& json);
    void messageForStatisticsPage(const QJsonObject& json);

private:
    Ui::MainWindow *ui;
    QTcpSocket* socket;
    QLabel *label;
    int retryCount = 0;
    QTimer *reconnectTimer;
    QStackedWidget* stackedWidget;

    AIChatDialog *aiDialog;
};
#endif // MAINWINDOW_H
